﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;

namespace ВУИ
{
    public partial class fLabReport : Form
    {
        Form1 main;
        int id;
        public fLabReport(Form1 Main, int ID)
        {
            InitializeComponent();
            main = Main;
            id = ID;
            List<ReportParameter> paramList = new List<ReportParameter>();
            paramList.Add(new ReportParameter("ФИО", Main.lPatient[Main.itnPatietn(id)].This.Surname + " " + Main.lPatient[Main.itnPatietn(id)].This.Name + " " + Main.lPatient[Main.itnPatietn(id)].This.Patronymic));
            reportViewer1.LocalReport.SetParameters(paramList);
            List<OAKReport> r = new List<OAKReport>();
            foreach (OAK o in main.lPatient[main.itnPatietn(id)].Labis.oak)
            {
                OAKReport t = new OAKReport();
                t.Дата = o.Дата;
                int d = (o.Дата - Main.lPatient[Main.itnPatietn(id)].Date_of_birth).Days;
                int m = 0;
                int y = 0;
                int n = 0;
                while (d > 365)
                {
                    d -= 365;
                    y++;
                }
                while (d > 30)
                {
                    d -= 30;
                    m++;
                }
                if ((y < 1) & (m >= 1))
                    while (d > 7)
                    {
                        d -= 7;
                        n++;
                    }
                if ((m >= 1) & (n == 4))
                {
                    m++;
                    n = 0;
                }
                string s = "";
                if (y > 0)
                {
                    s = Convert.ToString(y) + "год(лет) ";
                    if (m > 0) s += Convert.ToString(m) + "месяц(а)";
                }
                else
                {
                    if (m >= 1)
                    {
                        s = Convert.ToString(m) + "месяц(а) ";
                        if (n > 0) s += Convert.ToString(n) + "недели";
                    }
                    else
                    {
                        s = Convert.ToString(d) + "дней(я) ";
                    }
                }
                t.Возрост = s;
                t.Лейкоциты = o.Лейкоциты*1000;
                t.Лимфоциты = o.Лимфоциты * t.Лейкоциты / 100;
                t.Моноциты = o.Моноциты *t.Лейкоциты/100;
                t.НФ = o.НФ * t.Лейкоциты/100;


                int sum = y * 12 + m;
                int k = -1;
                if (main.lON.Count>0)
                if (sum<=main.lON[0].Месяц) k=0;
                s = "";
                for (int i=1; i<main.lON.Count;i++)
                {
                    if ((sum > main.lON[i - 1].Месяц) & (main.lON[0].Месяц <= main.lON[i].Месяц)) k = i;
                }
                if (k >= 0)
                {
                    if (o.Лейкоциты*1000 < main.lON[k].Лекоциты_Низ) s += "Лейкопения; ";
                    if (o.Лейкоциты*1000 > main.lON[k].Лекоциты_Верх) s += "Лейкоцитоз; ";
                    if (( o.Лейкоциты*10*o.НФ) < main.lON[k].НФ_Низ) s += "Нейтропения; ";
                    if ((o.НФ* o.Лейкоциты*10) > main.lON[k].НФ_Верх) s += "Нейтрофилез; ";
                    if ((o.Моноциты*o.Лейкоциты*10) > main.lON[k].Моноциты_Верх) s += "Моноцитоз; ";
                  
            
                }
                t.Результат = s;
                r.Add(t);
            }

            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", r));

            List<glabOtt> g = new List<glabOtt>();
            foreach (Imuno o in main.lPatient[main.itnPatietn(id)].Labis.im)
            {
                glabOtt t = new glabOtt();
                t.Дата = o.Дата;
                int d = (o.Дата - Main.lPatient[Main.itnPatietn(id)].Date_of_birth).Days;
                int m = 0;
                int y = 0;
                int n = 0;
                while (d > 365)
                {
                    d -= 365;
                    y++;
                }
                while (d > 30)
                {
                    d -= 30;
                    m++;
                }
                if ((y < 1) & (m >= 1))
                    while (d > 7)
                    {
                        d -= 7;
                        n++;
                    }
                if ((m >= 1) & (n == 4))
                {
                    m++;
                    n = 0;
                }
                string s = "";
                if (y > 0)
                {
                    s = Convert.ToString(y) + "год(лет) ";
                    if (m > 0) s += Convert.ToString(m) + "месяц(а)";
                }
                else
                {
                    if (m >= 1)
                    {
                        s = Convert.ToString(m) + "месяц(а) ";
                        if (n > 0) s += Convert.ToString(n) + "недели";
                    }
                    else
                    {
                        s = Convert.ToString(d) + "дней(я) ";
                    }
                }
                t.Возрост = s;
                t.IgA = o.IgA;
                t.IgG = o.IgG;
                t.IgM = o.IgM;



                int sum = y * 12 + m;
                int k = -1;
                if (main.lON.Count > 0)
                    if (sum <= main.lON[0].Месяц) k = 0;
                s = "";
                for (int i = 1; i < main.lON.Count; i++)
                {
                    if ((sum > main.lON[i - 1].Месяц) & (main.lON[0].Месяц <= main.lON[i].Месяц)) k = i;
                }
                if (k >= 0)
                {
                    if (o.IgA < main.lON[k].IgA_Низ) s += "Дифицит имуноглабулинов класса А; ";
                    if (o.IgA > main.lON[k].IgA_Верх) s += "Избыток имуноглабулинов класса А; ";
                    if (o.IgG < main.lON[k].IgG_Низ) s += "Дифицит имуноглабулинов класса G; ";
                    if (o.IgG > main.lON[k].IgG_Верх) s += "Избыток имуноглабулинов класса G; ";
                    if (o.IgM < main.lON[k].IgM_Низ) s += "Дифицит имуноглабулинов класса M; ";
                    if (o.IgM > main.lON[k].IgM_Верх) s += "Избыток имуноглабулинов класса M; ";

                }
                t.Результат = s;
                g.Add(t);
            }
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet2", g));
            List<ReportScrin> sc = new List<ReportScrin>();
            foreach (Scrin e in main.lPatient[main.itnPatietn(id)].Labis.scrin)
            {
           
                int d = (e.date - Main.lPatient[Main.itnPatietn(id)].Date_of_birth).Days;
                int m = 0;
                int y = 0;
                int n = 0;
                while (d > 365)
                {
                    d -= 365;
                    y++;
                }
                while (d > 30)
                {
                    d -= 30;
                    m++;
                }
                if ((y < 1) & (m >= 1))
                    while (d > 7)
                    {
                        d -= 7;
                        n++;
                    }
                if ((m >= 1) & (n == 4))
                {
                    m++;
                    n = 0;
                }
                string s = "";
                if (y > 0)
                {
                    s = Convert.ToString(y) + "год(лет) ";
                    if (m > 0) s += Convert.ToString(m) + "месяц(а)";
                }
                else
                {
                    if (m >= 1)
                    {
                        s = Convert.ToString(m) + "месяц(а) ";
                        if (n > 0) s += Convert.ToString(n) + "недели";
                    }
                    else
                    {
                        s = Convert.ToString(d) + "дней(я) ";
                    }
                }
                
                ReportScrin r1 = new ReportScrin();
                r1.Возрост = s;
                r1.Дата = e.date;
                r1.Серологические_иледования = "IgG";
                r1.ВПГ = e.data[0];
                r1.ЦМВ = e.data[1];
                r1.Токсопл = e.data[2];
                r1.Хламидии = e.data[3];
                sc.Add(r1);
                ReportScrin r2 = new ReportScrin();
                r2.Дата = e.date;
                r2.Возрост = s;
                r2.Серологические_иледования = "IgM";
                r2.ВПГ = e.data[4];
                r2.ЦМВ = e.data[5];
                r2.Токсопл = e.data[6];
                r2.Хламидии = e.data[7];
                sc.Add(r2);
                ReportScrin r3 = new ReportScrin();
                r3.Дата = e.date;
                r3.Возрост = s;
                r3.Серологические_иледования = "ИА";
                r3.ВПГ = e.data[8];
                r3.ЦМВ = e.data[9];
                r3.Токсопл = e.data[10];
                r3.Хламидии = e.data[11];
                sc.Add(r3);
            }
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet3", sc));
            List<ReportScrin> sc1 = new List<ReportScrin>();
            foreach (PCR e in main.lPatient[main.itnPatietn(id)].Labis.pcr)
            {

                int d = (e.Дата - Main.lPatient[Main.itnPatietn(id)].Date_of_birth).Days;
                int m = 0;
                int y = 0;
                int n = 0;
                while (d > 365)
                {
                    d -= 365;
                    y++;
                }
                while (d > 30)
                {
                    d -= 30;
                    m++;
                }
                if ((y < 1) & (m >= 1))
                    while (d > 7)
                    {
                        d -= 7;
                        n++;
                    }
                if ((m >= 1) & (n == 4))
                {
                    m++;
                    n = 0;
                }
                string s = "";
                if (y > 0)
                {
                    s = Convert.ToString(y) + "год(лет) ";
                    if (m > 0) s += Convert.ToString(m) + "месяц(а)";
                }
                else
                {
                    if (m >= 1)
                    {
                        s = Convert.ToString(m) + "месяц(а) ";
                        if (n > 0) s += Convert.ToString(n) + "недели";
                    }
                    else
                    {
                        s = Convert.ToString(d) + "дней(я) ";
                    }
                }

                ReportScrin r1 = new ReportScrin();
                r1.Возрост = s;
                r1.Дата = e.Дата;
                r1.Серологические_иледования = "ВПГ";
                r1.ВПГ = e.ВпгСреда;
                r1.ЦМВ = e.ВпгРез;
                sc1.Add(r1);
                ReportScrin r2 = new ReportScrin();
                r2.Возрост = s;
                r2.Дата = e.Дата;
                r2.Серологические_иледования = "ЦМВ";
                r2.ВПГ = e.ЦмвСреда;
                r2.ЦМВ = e.ЦмвРез;
                sc1.Add(r2);
                ReportScrin r3 = new ReportScrin();
                r3.Возрост = s;
                r3.Дата = e.Дата;
                r3.Серологические_иледования = "Хламидии";
                r3.ВПГ = e.ХламидииСреда;
                r3.ЦМВ = e.ХламидииРез;
                sc1.Add(r3);
                ReportScrin r4 = new ReportScrin();
                r4.Возрост = s;
                r4.Дата = e.Дата;
                r4.Серологические_иледования = "Токсоплазма";
                r4.ВПГ = e.ТоксоплазмаСреда;
                r4.ЦМВ = e.ТоксоплазмаРез;
                sc1.Add(r4);
            }
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet4", sc1));

            List<ReportScrin> sc2 = new List<ReportScrin>();
            foreach (seroocc e in main.lPatient[main.itnPatietn(id)].Labis.so)
            {

                int d = (e.date - Main.lPatient[Main.itnPatietn(id)].Date_of_birth).Days;
                int m = 0;
                int y = 0;
                int n = 0;
                while (d > 365)
                {
                    d -= 365;
                    y++;
                }
                while (d > 30)
                {
                    d -= 30;
                    m++;
                }
                if ((y < 1) & (m >= 1))
                    while (d > 7)
                    {
                        d -= 7;
                        n++;
                    }
                if ((m >= 1) & (n == 4))
                {
                    m++;
                    n = 0;
                }
                string s = "";
                if (y > 0)
                {
                    s = Convert.ToString(y) + "год(лет) ";
                    if (m > 0) s += Convert.ToString(m) + "месяц(а)";
                }
                else
                {
                    if (m >= 1)
                    {
                        s = Convert.ToString(m) + "месяц(а) ";
                        if (n > 0) s += Convert.ToString(n) + "недели";
                    }
                    else
                    {
                        s = Convert.ToString(d) + "дней(я) ";
                    }
                }

                ReportScrin r1 = new ReportScrin();
                r1.Возрост = s;
                r1.Дата = e.date;
                r1.Серологические_иледования = "серонегативность";
                r1.ВПГ = e.снвпг;
                r1.ЦМВ = e.снцмв;
                r1.Токсопл = "";
                r1.Хламидии = "";
                sc2.Add(r1);
                ReportScrin r2 = new ReportScrin();
                r2.Дата = e.date;
                r2.Возрост = s;
                r2.Серологические_иледования = "высокий титр антител IgG";
                r2.ВПГ = e.IgGвпг;
                r2.ЦМВ = e.IgGцмв;
                r2.Токсопл = e.IgGт;
                r2.Хламидии = "";
                sc2.Add(r2);
                ReportScrin r3 = new ReportScrin();
                r3.Дата = e.date;
                r3.Возрост = s;
                r3.Серологические_иледования = "серопозитивность";
                r3.ВПГ = "";
                r3.ЦМВ = "";
                r3.Токсопл = "";
                r3.Хламидии = e.спх;
                sc2.Add(r3);
                ReportScrin r4 = new ReportScrin();
                r4.Дата = e.date;
                r4.Возрост = s;
                r4.Серологические_иледования = "IgM";
                r4.ВПГ = e.IgMвпг;
                r4.ЦМВ = e.IgGцмв;
                r4.Токсопл = e.IgMт;
                r4.Хламидии = e.IgMх;
                sc2.Add(r4);
                ReportScrin r5 = new ReportScrin();
                r5.Дата = e.date;
                r5.Возрост = s;
                r5.Серологические_иледования = "низкоавидные антитела";
                r5.ВПГ = e.НААвпг;
                r5.ЦМВ = e.НААцмв;
                r5.Токсопл = e.НААт;
                r5.Хламидии = e.НААх;
                sc2.Add(r5);
            }
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet5", sc2));

        }

        private void fLabReport_Load(object sender, EventArgs e)
        {

            this.reportViewer1.RefreshReport();
        }

        private void reportViewer1_Load(object sender, EventArgs e)
        {

        }
    }
}
